/*

* ------------------------------------------------------------------------
* ------------------------------------------------------------------------
* |     Smart-Shop开源商城系统/ Java商城-首选电商平台系统 请务必保留此注释头信息
* |     开源地址: https://gitee.com/ningbo-qishan/gruul-mall
* ------------------------------------------------------------------------
* ------------------------------------------------------------------------
* |     可正常分享和学习源码,未经授权 不可商用！
* |     商业版中台购买/开源版商业授权 联系技术客服
* |     官网:  https://www.73app.cn/
* ------------------------------------------------------------------------
* ------------------------------------------------------------------------
* |     Copyright (c) 2016-2999 宁波启山智软科技有限公司
* |     版权所有 ,侵权必究！
* ------------------------------------------------------------------------

*/
package com.medusa.gruul.platform.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.medusa.gruul.common.core.util.PageUtils;
import com.medusa.gruul.platform.api.entity.AccountInfo;
import com.medusa.gruul.platform.api.entity.AgentRecharge;
import com.medusa.gruul.platform.model.dto.OrderOptionDto;
import com.medusa.gruul.platform.model.dto.agent.AgentBalanceRechargeDto;
import com.medusa.gruul.platform.model.vo.BalanceRechargeVo;
import com.medusa.gruul.platform.model.vo.agent.BalanceDetailsVo;

import java.math.BigDecimal;
import java.util.Map;

/**
 * <p>
 * 代理商充值记录表 服务类
 * </p>
 *
 * @author whh
 * @since 2020-10-04
 */
public interface IAgentRechargeService extends IService<AgentRecharge> {

    /**
     * 新增代理充值记录
     *
     * @param accountInfo 用户信息
     * @param agentId     代理id
     * @param payType     支付类型
     * @param payAmount   支付金额
     * @param payInfo     支付信息
     * @return com.medusa.gruul.platform.api.entity.AgentRecharge
     */
    AgentRecharge newAgentRecharge(AccountInfo accountInfo, Long agentId, Integer payType,
                                   BigDecimal payAmount, String payInfo);

    /**
     * 代理商为商户充值
     *
     * @param dto com.medusa.gruul.platform.model.dto.agent.AgentBalanceRechargeDto
     * @return com.medusa.gruul.platform.model.vo.BalanceRechargeVo
     */
    BalanceRechargeVo agentBalanceRecharge(AgentBalanceRechargeDto dto);

    /**
     * 查询指定订单是否支付
     *
     * @param orderId 订单id
     * @return java.lang.Boolean
     */
    Boolean agentBalanceRechargePayIfOk(Long orderId);

    /**
     * 微信充值回调
     *
     * @param xmlResult 微信返回数据
     * @return success or fail
     */
    String rechargeNotifyWx(String xmlResult);


    /**
     * 支付宝回调
     *
     * @param toMap 回调数据
     * @return success or fail
     */
    String rechargeNotifyAlipay(Map<String, String> toMap);

    /**
     * 查询代理的充值明细
     *
     * @param page      页数
     * @param size      条数
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @param search     订单号
     * @param status    订单状态
     * @return com.medusa.gruul.platform.model.vo.agent.BalanceDetailsVo
     */
    PageUtils<BalanceDetailsVo> balanceDetails(Integer page, Integer size, String startTime, String endTime, String search, String status);

    /**
     * 管理台分页查询代理的充值订单
     *
     * @param page        页数
     * @param size        条数
     * @param startTime   开始时间
     * @param endTime     结束时间
     * @param payType     支付方式 0-所有 1支付宝 2 微信 3汇款支付 4-代理余额支付
     * @param status      订单状态 1:充值中 2:充值成功 3:充值成功
     * @param phone       手机号
     * @param rechargeNum 充值订单号
     * @param nikeName    商户昵称
     * @return com.medusa.gruul.platform.model.vo.agent.BalanceDetailsVo
     */
    PageUtils<BalanceDetailsVo> payOrder(Integer page, Integer size, String startTime, String endTime, Integer payType, Integer status, String phone, String rechargeNum, String nikeName);

    /**
     * 操作订单
     *
     * @param dto com.medusa.gruul.platform.model.dto.OrderOptionDto
     */
    void orderOption(OrderOptionDto dto);
}
